
// 树形结构数据 结构化

/**
 * 一个扁平数据列表 -> 描述树形结构的字段(至少一个) -> 树形数据列表
 * 
 * 顶级(父级id) 与 子级(pid)数据分开
 *    递归操作  下一级数据分析
 * 
 * 找到对应的数据
 * pid -> id -> {pid} -> id -> {
 *  children: [{pid}]
 * }
 * 
 */

const treeData = formatDataTree(data)
console.log(treeData);

/*
function formatDataTree(data) { // 递归方法
  // 先筛选出顶级与子级(二级)
  let parents = data.filter(p => p.pid === 0),
      children = data.filter(c => c.pid !== 0);

  // console.log(parents, children);
  
  dataToTree(parents, children);
  
  return parents;

  function dataToTree(parents, children) {
    parents.map(p => {
      children.map((c, i) => {
        if(c.pid === p.id) {
          // 每次匹配成功后就删掉当前项
          let _children = JSON.parse(JSON.stringify(children));
          _children.splice(i, 1);
          // 递归处理子级
          dataToTree([c], _children);

          if (p.children) {
            p.children.push(c);
          } else {
            p.children = [c];
          }
        }
      })
    })
  }
}
*/


function formatDataTree(data) { // 扁平化处理方式
  let _data = JSON.parse(JSON.stringify(data));

  return _data.filter(p => {
    const _arr = _data.filter(c => c.pid === p.id);
    _arr.length && (p.children = _arr);

    return p.pid === 0;
  })
}
